########## FAVORITE CLASS MODEL ##########

Favorite_Class_Model = function(kredit_learning, kredit_validation) 
{

# Selection de variables selon la methode du "favorite class model"
cat("Favorite Class Model : \n")
# Generation de la matrice de correlation des covariables avec la classe kredit
correlation = cor(kredit, kredit$kredit)
# Tri de ces correlations par ordre decroissant
correlation_triees <- as.matrix(sort(abs(correlation )[,1], decreasing =T))
# Selection des variables
nb_variables = 4
cat("Nombre de variables choisies :",nb_variables,"\n")
# Selectionne les nb_variables premieres variables
correlations_selectionnees = correlation_triees[2:(nb_variables+1),1]

print (correlation_triees)
# Selectionne les noms des variables selectionnees
noms_correlations_selectionnees = as.matrix(names(correlations_selectionnees))
cat("Variables choisies : ",noms_correlations_selectionnees,"\n")

score = c(1:nrow(kredit_validation))
pred =  c(1:nrow(kredit_validation))

	# Mise en forme des nom de variables pour la procedure GLM
	formula <- as.formula(paste("kredit ~ ", paste(noms_correlations_selectionnees, collapse="+") , sep=" "))
	# Calcul des coefficients de la fonction score avec la procedure GLM
	GLM.1 <- glm(formula,  family=binomial(logit), data=kredit_learning)

	# Calcul des scores
	score <- predict(GLM.1,type="resp", newdata=kredit_validation)

	# Affectation au groupe d'appartenance
	(pred <- ifelse(score < 0.5, 0, 1))

	# Calcul de l'erreur
	mc <- table(kredit_validation$kredit, pred)
  proportion_erreur1 <- (mc[1,2]/sum(mc)) + (mc[2,1]/sum(mc))
  cat("Proportion d'erreur : ", proportion_erreur1, "\n")
  proportion_erreur2 <- 0.95*(mc[1,2]/sum(mc)) + 0.05*(mc[2,1]/sum(mc))
  cat("Proportion d'erreur (Refus de bons clients): ", proportion_erreur2, "\n")
  proportion_erreur3 <- 0.05*(mc[1,2]/sum(mc)) + 0.95*(mc[2,1]/sum(mc))
  cat("Proportion d'erreur (Acceptation de mauvais clients): ", proportion_erreur3, "\n")

res  =  matrix(-1, nrow(kredit_validation), 2)
res[,1] = score
res[,2] = pred
row.names(res) = row.names(kredit_validation)

return (res)
}
